File system filters are used to perform some sort of processing of I/O operations as they occur in the system. For example, file system filters perform such operations as encryption and decryption, compression, read and write operations, etc. The file system filters are stacked one on top of the other, resulting in a filter stack. File system filters are difficult to implement and cannot be easily unloaded.
Systems such as the Windows NT® operating system from Microsoft Corporation use a stacked-call through model where filter system filters are stacked on top of each other. Operations such as reads and writes are sent down the stack and must pass back up through each filter in the stack as the operation is completed. In order to unload a file system filter, the operations of the filter must be complete before removing the filter. Each file system filter tracks the next device in the stack to which it will pass operations. There is no interface for safely updating a file system filter's link to the next device. As a result of this, only a filter located on top of the filter stack can be unloaded while the computer system is operating because there is no other filter in the stack referencing the top filter. For file system filters located anywhere else on the stack, the computer system must be stopped and rebooted for the filter to be removed. Otherwise, the computer system will not operate reliably. As a result, users must continually reboot when installing or removing file system filter software. The rebooting is time-consuming, inefficient, and frustrating to the user as well as computer programmers.